package dao

import "adam2/internal/model"

type Real9QuantStockTransactionRecordDao interface {
	// 根据账户名，查询正在持仓的股票
	FindByAccountNameAndSellNull(accountName string) model.Real9QuantStockTransactionRecordArray

	// 根据账户名和日期，查询正在持仓的股票
	FindByAccountNameAndDateAndSellNull(accountName string, date string) model.Real9QuantStockTransactionRecordArray

	// 查询某个量化账户之前卖出失败的股票
	FindQuantResolveFailSellByAccountName(accountName string) model.Real9QuantStockTransactionRecordArray

	// 更新（卖出时）
	UpdateWhenSell(everyDate string, stockTransactionDataAll model.StockTransactionDataAll, real9QuantStockTransactionRecord model.Real9QuantStockTransactionRecord)

	// 查询某个账号是否有退市的股票
	FindDelistByLastTransactionDateAndAccountName(lastTransactionDate string, accountName string) model.Real9QuantStockTransactionRecordArray

	// 查询某个量化账户的买入的股票的交易记录，不包括real9_q_stock_filter表中已经存在的记录
	FindByAccountNameAndNotInReal9QuantStockFilter(accountName string) model.Real9QuantStockTransactionRecordArray

	// 通过id，更新fail_sell_reason字段
	UpdateFailSellReasonById(id int, failSellReason int)

	// 更新real9_q_account表
	UpdateAfterBuy(real9QuantAccount model.Real9QuantAccount,
		everyDate string, sellOrBuyStockNumber int, stockAssets float64, currentBuyOrSellStockAssets float64)

	// 根据账户名称，查询在real9_q_stock_transact_record表中，但不在real9_o_stock_transact_record表中未卖出的股票记录，不包括当天是最后一个交易日的股票
	FindByAccountNameAndSellNullAndNotInReal9OptimizeStockTransactionRecord(accountName string, date string) model.Real9QuantStockTransactionRecordArray

	// 根据卖出日期查询记录
	FindBySellDate(sellDate string) model.Real9QuantStockTransactionRecordArray

	// 根据buy_date，删除sell_date为空的记录
	DeleteBySellDateNullAndBuyDate(date string)

	// 根据sell_date，将sell_date、sell_price、sell_amount、profit_and_loss、profit_and_loss_rate、stamp_duty、registration_fee_when_sell、commission_when_sell字段改为null
	UpdateNullBySellDate(date string)

	// 根据accountName和stockCode，查询sell_date为空的那一条记录
	FindByAccountNameAndStockCodeAndSellDateNull(accountName string, stockCode string) model.Real9OptimizeStockTransactionRecord
}
